docker

您所在的位置:网站首页 gdb version没有 docker

docker

2024-05-16 21:56| 来源: 网络整理| 查看: 265

我需要在 Docker 内部运行 gdb,并且我对 emacs 提供的接口有强烈的偏好。

在执行 Mx gdb 时,我输入“docker-compose -f ~/docker-services/dev/docker-compose.yml exec dev_rhel7 bash -c “gdb -i=mi””,然后它显示以下消息。

当前目录是 /home/drcoeurjoly/docker-services/dev/

错误:您没有在 GDB 的命令行上指定 -i=mi!警告:未设置 MY_UID 变量。默认为空字符串。

1-inferior-tty-set /dev/pts/3

2-gdb-设置高度 0

3-gdb-set 不停 1

4-启用漂亮打印

5 文件列表执行源文件

6 文件列表执行源文件

7-gdb-show 提示

8 堆栈信息帧

9 线程信息

10-break-list

11 线程信息

12-break-list

=添加线程组,id="i1"

~"GNU gdb (GDB) Red Hat Enterprise Linux 7.6.1-114.el7\n"

~"版权 (C) 2013 Free Software Foundation, Inc.\n"

~"许可证 GPLv3+:GNU GPL 版本 3 或更高版本http://gnu.org/licenses/gpl.html \n这是免费软件:您可以自由更改和重新分发它。\n在允许的范围内没有任何保证法律。输入“显示复制”\n和“显示保修”以了解详细信息。\n”

~"此 GDB 配置为 \"x86_64-redhat-linux-gnu\"。\n有关错误报告说明,请参阅:\n"

~" http://www.gnu.org/software/gdb/bugs/ .\n"

=cmd-param-changed,param="历史保存",value="on"

=cmd-param-changed,param="历史文件名",value="/home/drcoeurjoly/dotfiles/gdb/.gdb_history"

=cmd-param-changed,param="打印漂亮",value="on"

=cmd-param-changed,param="打印对象",value="on"

=cmd-param-changed,param="print vtbl",value="on"

=cmd-param-changed,param="demangle-style",value="gnu-v3"

=cmd-param-changed,param="follow-fork-mode",value="child"

=cmd-param-changed,param="detach-on-fork",value="off"

(gdb)

1^完成

(gdb)

2^完成

(gdb)

3^完成

(gdb)

4^完成

(gdb)

5^完成,文件=[]

(gdb)

" 6^error,msg="未加载符号表。使用\"file\" 命令。"

(gdb)

7^完成,值=“(gdb)”

(gdb)

8^error,msg="没有寄存器。"

(gdb)

9^完成,线程=[]

(gdb)

10^done,BreakpointTable={nr_rows="0",nr_cols="6",hdr=[{width="7",alignment="-1",col_name="number",colhdr="Num"},{ width="14",alignment="-1",col_name="type",colhdr="Type"},{width="4",alignment="-1",col_name="disp",colhdr="Disp "},{width="3",alignment="-1",col_name="enabled",colhdr="Enb"},{width="10",alignment="-1",col_name="addr", colhdr="地址"},{width="40",alignment="2",col_name="what",colhdr="What"}],body=[]}

(gdb)

11^完成,线程=[]

(gdb)

12^done,BreakpointTable={nr_rows="0",nr_cols="6",hdr=[{width="7",alignment="-1",col_name="number",colhdr="Num"},{ width="14",alignment="-1",col_name="type",colhdr="Type"},{width="4",alignment="-1",col_name="disp",colhdr="Disp "},{width="3",alignment="-1",col_name="enabled",colhdr="Enb"},{width="10",alignment="-1",col_name="addr", colhdr="地址"},{width="40",alignment="2",col_name="what",colhdr="What"}],body=[]}

(gdb)

请注意,我在 Docker 中成功输入了 gdb,因为 GDB 说:

“GNU gdb (GDB) Red Hat Enterprise Linux 7.6.1-114.el7\n”

在我的主机操作系统(Debian)中: gdb --version 输出:

GNU gdb (Debian 8.2.1-2+b3) 8.2.1

在 Debian 中,我执行 Docker 命令: docker-compose -f ~/docker-services/dev/docker-compose.yml exec dev_rhel7 bash -c "gdb -i=mi" 得到面向机器的文本界面。

从之前的测试中,我推断这是 emacs 的问题,而不是 Docker。

当输入二进制文件的路径而不是选项 -i=mi 时,它会很好地读取符号: M-x gdb RETURN docker-compose -f ~/docker-services/dev/docker-compose.yml exec dev_rhel7 bash -c "gdb ~/babel_sandbox/build/foo" 输出:

当前目录是 /home/drcoeurjoly/docker-services/dev/

错误:您没有在 GDB 的命令行上指定 -i=mi!

警告:未设置 MY_UID 变量。默认为空字符串。

1-inferior-tty-set /dev/pts/3

2-gdb-设置高度 0

3-gdb-set 不停 1

4-启用漂亮打印

5 文件列表执行源文件

6 文件列表执行源文件

7-gdb-show 提示

8 堆栈信息帧

9 线程信息

10-break-list

11 线程信息

12-break-list

GNU gdb (GDB) 红帽企业 Linux 7.6.1-114.el7

版权所有 (C) 2013 Free Software Foundation, Inc.

许可证 GPLv3+:GNU GPL 版本 3 或更高版本http://gnu.org/licenses/gpl.html

这是免费软件:您可以自由更改和重新分发它。

在法律允许的范围内,不提供任何保证。输入“显示复制”

和“显示保修”了解详情。

这个 GDB 被配置为“x86_64-redhat-linux-gnu”。

有关错误报告说明,请参阅:

http://www.gnu.org/software/gdb/bugs/ ...

从 /home/drcoeurjoly/babel_sandbox/build/foo 读取符号...完成。

(gdb) 1-inferior-tty-set /dev/pts/3

未定义的命令:“1-inferior-tty-set”。试试“帮助”。

(gdb) 2-gdb-设置高度 0

未定义的命令:“2-gdb-set”。试试“帮助”。

(gdb) 3-gdb-set 不停 1

未定义的命令:“3-gdb-set”。试试“帮助”。

(gdb) 4-启用漂亮打印

未定义的命令:“4-enable-pretty-printing”。试试“帮助”。

(gdb) 5 文件列表执行源文件

未定义的命令:“5-file-list-exec-source-files”。试试“帮助”。

(gdb) 6 文件列表执行源文件

未定义的命令:“6-file-list-exec-source-file”。试试“帮助”。

(gdb) 7-gdb-show 提示

未定义的命令:“7-gdb-show”。试试“帮助”。

(gdb) 8 堆栈信息帧

未定义的命令:“8-stack-info-frame”。试试“帮助”。

(gdb) 9 线程信息

未定义的命令:“9-thread-info”。试试“帮助”。

(gdb) 10-break-list

未定义的命令:“10-break-list”。试试“帮助”。

(gdb) 11 线程信息

未定义的命令:“11 线程信息”。试试“帮助”。

(gdb) 12-break-list

未定义的命令:“12-break-list”。试试“帮助”。

(gdb)

我还尝试将gdb -i=mi脚本放入内部并从 emacs 调用它,但无济于事。直接从 bash 调用而不是从 emacs 调用。

相关信息:

我的 spacemacs 配置 foo 程序用于测试在 emacs 中传递给 gdb 的参数。

我不知道 dockerfile 和 docker-compose yml 是否相关。如果是这样,我将创建一个回购。

版本:

主持人: uname -a

Linux des26 4.19.0-6-amd64 #1 SMP Debian 4.19.67-2+deb10u2 (2019-11-11) x86_64 GNU/Linux

主机中的 Emacs: emacs --version

GNU Emacs 26.3

主机中的 GDB: gdb --version

GNU gdb (Debian 8.2.1-2+b3) 8.2.1

主机中的 Docker: docker --version

Docker 版本 18.09.1,构建 4c52b90

Docker-compose 在主机中: docker-compose --version

docker-compose 版本 1.21.0,构建未知

码头集装箱: cat /etc/redhat-release

CentOS Linux 版本 7.5.1804(核心)

docker容器中的GDB: gdb --version

GNU gdb (GDB) 红帽企业 Linux 7.6.1-114.el7

早在 2017 年 8 月,Robert Mecklenburg就在此处和此处报告了此问题。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3